Context switching

PC(Program Counter)+SP(Stack Pointer)
Stack, HEAP, DATA(BSS, DATA) ,TEXT(CODE)
Context switching
ProcessA, ProcessB가 scheduler에 등록되어 있을 때,
ProcessA->ProcessB, ProcessB->ProcessA로 바뀔 때, PC, SP의 동작 방법

PCB
PCB에 Process 전환 전의 PC, SP 상태를 저장해 두고 다른 Process로 전환

다시 전환할 때, PCB를 추가하고 CPU register PC, SP를 전환할 Process의 PCB 내용으로 변환
Context switch-Everything you need to Know
Process Control Block(PCB)
1. Process ID
2. Register 값(PC, SP등)
3. Scheduling Info(Process State)—(ready state, block state, running state…)
4. Memory Info(메모리 사이즈 limit)

PCB: 프로세스가 실행중인 상태를 캡쳐/구조화해서 저장
example of PCB(운영체계 마다 구조가 다름)
1. Process ID
2. Register(PC, SP)
3. Scheduling Info(Process state)
4. Memory Info
OS] 3-1. Process I / 프로세스란 무엇인가 / Process Control Block / Scheduler+ priority, type-parent, list-child
정리
프로세스 구조: stack, heap, data(bss+data), text(code)
pcb: 프로세스 상태정보, pc+sp, memory, scheduling info…

context switching은 운영체계에서 매우 많이 사용된다.(시분할 해당 시간+인터럽트 발생시 등이 발생할 때마다 동작)
따라서 빠른 동작을 위해서 어셈블리어로 작성되어 있는 경우가 많다.
프로세스와 컨텍스트 스위칭
context switching(문맥 교환)
    CPU에 실행할 프로세스를 교체하는 기술
1. 실행 중지한 프로세스 정보를 해당 프로세스의 PCB에 업데이트해서, 메인 메모리에 저장
2. 다음 실행할 프로세스 정보를 메인 메모리에 있는 해당 PCB 정보를 CPU에 넣고 실행

CPU <- PC/SP ...
디스패치(dispatch): ready 상태의 프로세스를 runnning 상태로 바꾸는 것
ms 단위(약 10ms)로 프로세스 스위칭이 일어남: 1초에 100번 context switching 실행
컨텍스트 스위칭 코드는 c언어가 아니라, 어셈블리어로 컨텍스트 스위칭 코드를 구현(리눅스)

리눅스는 각각의 CPU별로 스위칭 컴파일러 어셈블리 코드를 각각 작성해 놓음
초기 컴퓨터 프로그램들은 어셈블리어로 작성
    서로 다른 CPU 아키텍처가 등장할 때마다 매번 똑같은 프로그램 작성
    어셈블리어로 프로그램 작성 속도가 매우 떨어짐
컴파일러 등장
    CPU 아키텍처에 따라서는 컴파일러 프로그램만 만들면 된다. 기존 코드 재작성할 필요가 없다.(이식성 증가)
    어셈블리어로 작성한 코드보다는 속도가 떨어질 수 있다.